package tests.helloworld;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.bac.sbe.web.report.ReportFormat;
import net.bac.sbe.web.report.ReportManager;
import net.bac.sbe.web.report.itemstoretain.ItemToRetainReportGenerator;
import net.bac.sbe.web.report.sonarfiltered.SonarFilteredReportGenerator;
import net.bac.sbe.web.report.sonarfiltered.view.MetricView;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

public class JasperHelloWorld {
	public static void main(String[] args)
	  {
	    String reportName = "src/test/resources/Sonar CRI-15560.pdf";
//		Map<String, List<Object>> data = new HashMap<String, List<Object>>();
//
//		data.put("PROYECTO", Arrays.asList(new Object[]{"SbeBackEnd", "SbeBackEnd", "SbeBackEnd", "SbeBackEnd", "SbeBackEnd"}));
//		data.put("MODULO", Arrays.asList(new Object[]{"SbeBackEndWeb", "SbeBackEndWeb", "SbeBackEndWeb", "SbeBackEndWeb", "SbeBackEndWeb"}));
//		data.put("BIBLIOTECA", Arrays.asList(new Object[]{"net.bac.sbe.web.common.helper", "net.bac.sbe.web.module.transfer.converter.net.bac.sbe.web.module.transfer.converter", "net.bac.sbe.web.module.transfer.dao", "net.bac.sbe.web.module.transfer.view", "net.bac.sbe.web.common.util"}));
//		data.put("ITEM", Arrays.asList(new Object[]{"TransferHelper", "TransferConverter", "TransferDAO", "TransferView", "UniqueIdentifierGenerator"}));
//		data.put("TIPO", Arrays.asList(new Object[]{"java", "java", "java", "java", "java"}));
//		data.put("ES_NUEVO", Arrays.asList(new Object[]{"no", "si", "no", "si", "no"}));
//
//		ItemToRetainReportGenerator.generateReport("CRI-15560", "Roberto Hernandez", data, ReportFormat.PDF, reportName, getRowCount(data));

	    //********************************************************************************************************************************************************************

//	    JRDataSource ds = new JRDataSource(){
//			private int counter = 0;
//			public Object getFieldValue(JRField arg0) throws JRException {
//				if("METRICS".equals(arg0.getName())){
//					return Arrays.asList(new MetricView[]{
//							new MetricView("coverage", 0D, 20D, "La validacion de linea base no fue exitosa, debe validar este item"),
//							new MetricView("blocker", 0D, 20D, "La validacion de linea base no fue exitosa, debe validar este item"),
//							new MetricView("critical", 0D, 20D, "La validacion de linea base no fue exitosa, debe validar este item"),
//							new MetricView("major", 0D, 20D, "La validacion de linea base no fue exitosa, debe validar este item")});
//				}
//				else{
//					return "Valor!!";
//				}
//			}
//
//			public boolean next() throws JRException {
//				counter++;
//				if(counter == 5){
//					return false;
//				}
//				return true;
//			}
//	    };
//
//	    JRDataSource ds2 = new JRDataSource(){
//			private int counter = 0;
//			public Object getFieldValue(JRField arg0) throws JRException {
//				if("GRADE".equals(arg0.getName())){
//					return 100D;
//				}
//				else{
//					return "Valor!!";
//				}
//			}
//
//			public boolean next() throws JRException {
//				counter++;
//				if(counter == 5){
//					return false;
//				}
//				return true;
//			}
//	    };
//
//	    Map<String, Object> params = new HashMap<String, Object>();
//	    params.put("PROJECT_ID", "CRI-15427");
//	    params.put("PROJECT_NAME", "Nombre del proyecto");
//	    params.put("ANALYST", "Analista del proyecto");
//	    params.put("INDICATORS_DS", ds2);
//
//		ReportManager.generatePDFReport("/net/bac/sbe/web/report/templates/SonarFilteredReport.jasper", reportName, params, ds);



//		Map<String, List<Object>> primaryDataSet = new HashMap<String, List<Object>>();
//		Map<String, List<Object>> summaryDataSet = new HashMap<String, List<Object>>();
//
//		MetricView metric1 = new MetricView("coverage", 0D, 20D, "La validacion de linea base no fue exitosa, debe validar este item por lo que no puede ser aceptado. Validelo con su supervisor o MAME!!");
//		MetricView metric2 = new MetricView("blocker_violations", 0D, 30D, "La validacion de linea base no fue exitosa, debe validar este item");
//		MetricView metric3 = new MetricView("critical_violations", 0D, 40D, "La validacion de linea base no fue exitosa, debe validar este item");
//		MetricView metric4 = new MetricView("major_violations", 50D, 20D, "La validacion de linea base no fue exitosa, debe validar este item");
//
//		List<MetricView> metrics = new ArrayList<MetricView>();
//		metrics.add(metric1);
//		metrics.add(metric2);
//		metrics.add(metric3);
//		metrics.add(metric4);
//
//
//		primaryDataSet.put("PACKAGE", Arrays.asList(new Object[]{"net.bac.sbe.web.1", "net.bac.sbe.web.2", "net.bac.sbe.web.3", "net.bac.sbe.web.4", "net.bac.sbe.web.5"}));
//		primaryDataSet.put("ITEM", Arrays.asList(new Object[]{"LoginAction1", "LoginAction2", "LoginAction3", "LoginAction4", "LoginAction5"}));
//		primaryDataSet.put("METRICS", Arrays.asList(new Object[]{metrics, metrics, metrics, metrics, metrics}));
//		primaryDataSet.put("IS_NEW", Arrays.asList(new Object[]{"Si", "No", "Si", "Si", "No"}));
//		primaryDataSet.put("IS_VALID_ITEM", Arrays.asList(new Object[]{"No", "Si", "No", "No", "No"}));
//		primaryDataSet.put("APPLICATION", Arrays.asList(new Object[]{"SEC", "SEC", "SEC", "SEC", "SEC"}));
//		primaryDataSet.put("MODULE", Arrays.asList(new Object[]{"EbacWeb", "EbacWeb", "EbacWeb", "EbacWeb", "EbacWeb"}));
//
//		summaryDataSet.put("INDICATOR", Arrays.asList(new Object[]{"Cobertura", "Violaciones"}));
//		summaryDataSet.put("GRADE", Arrays.asList(new Object[]{20D, 30D}));
//
//
//	    SonarFilteredReportGenerator.generateReport("Nombre de proyecto", "CRI-15427", "Roberto Hernandez", primaryDataSet, summaryDataSet, ReportFormat.PDF, reportName, 5);

	  }

	private static int getRowCount(Map<String, List<Object>> data) {
		int rowCount = 0;
		if(null != data){
			rowCount = data.entrySet().iterator().next().getValue().size();
		}
		return rowCount;
	}

}
